# 作者：SP
# 开发时间：2024/7/31 22:01
'''列表（list）来实现栈的功能。栈是一种后进先出（LIFO, Last-In-First-Out）数据结构，意味着最后添加的元素最先被移
除。列表提供了一些方法，使其非常适合用于栈操作，特别是 append() 和 pop() 方法。
用 append() 方法可以把一个元素添加到栈顶，用不指定索引的 pop() 方法可以把一个元素从栈顶释放出来

栈操作
压入（Push）: 将一个元素添加到栈的顶端。
弹出（Pop）: 移除并返回栈顶元素。
查看栈顶元素（Peek/Top）: 返回栈顶元素而不移除它。
检查是否为空（IsEmpty）: 检查栈是否为空。
获取栈的大小（Size）: 获取栈中元素的数量
'''
class Stack:
    def __init__(self):
        self.stack = []

    def push(self, item):
        self.stack.append(item)

    def pop(self):
        if not self.is_empty():
            return self.stack.pop()
        else:
            raise IndexError("pop from empty stack")

    def peek(self):
        if not self.is_empty():
            return self.stack[-1]
        else:
            raise IndexError("peek from empty stack")

    def is_empty(self):
        return len(self.stack) == 0

    def size(self):
        return len(self.stack)

# 使用示例
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)

print("栈顶元素:", stack.peek())  # 输出: 栈顶元素: 3
print("栈大小:", stack.size())    # 输出: 栈大小: 3

print("弹出元素:", stack.pop())  # 输出: 弹出元素: 3
print("栈是否为空:", stack.is_empty())  # 输出: 栈是否为空: False
print("栈大小:", stack.size())    # 输出: 栈大小: 2